package object3;

/**
 * 面向对象编程（高级部分）
 */
public class ChildGame {

    public static void main(String[] args) {

        /*
            问题：
            有一群小孩在玩堆雪人,不时有新的小孩加入,请问如何知道现在共有多少人在玩?，编写程序解决。

            传统方法：
            1)在main方法中定义一个变量 count
            2)当一个小孩加入游戏后 count++
            存在的缺陷：
            1)count是一个独立于对象的变量，很尴尬
            2)访问count很麻烦，没有用到oop
            3)引出 类变量/静态变量

            static变量是对象共享，不管static变量在哪：
            1)static变量是同一个类所有对象共享
            2)static类变量，在类加载时就生成了
         */

        Child child1 = new Child("白骨精");
        child1.join();

        Child child2 = new Child("狐狸精");
        child2.join();

        Child child3 = new Child("老鼠精");
        child3.join();

        //类变量可以通过类名来访问
        System.out.println("共有" + Child.count + "个小孩加入了游戏...");

    }
}

class Child { //类

    private String name;

    //定义一个变量 count，是一个类变量(静态变量) static
    //该变量最大的特点就是会被Child类的所有对象共享实例
    public static int count = 0;

    public Child(String name) {
        this.name = name;
    }

    public void join() {
        System.out.println(name + "加入了游戏...");
        count++;
    }
}